package cn.sxgan.core.services;


import cn.sxgan.common.entity.query.SysUserQuery;
import cn.sxgan.common.entity.sys.GlobalUser;
import cn.sxgan.common.entity.sys.PageRequest;
import cn.sxgan.common.entity.vo.SysRoleAndMenuVO;
import cn.sxgan.common.entity.vo.SysRoleVO;
import cn.sxgan.common.entity.vo.SysUserAndRoleVO;
import cn.sxgan.common.entity.vo.SysUserVO;
import cn.sxgan.common.response.Result;

import java.util.List;

/**
 * @Description: 系统用户服务接口
 * @Author: sxgan
 * @Date: 24/7/12 17:39
 * @Version: 1.0
 **/
public interface ISysUserService {
    /**
     * 通过邮箱查询用户
     *
     * @param currentUser 当前登录用户
     * @return 用户视图对象
     */
    SysUserVO selectSysUserInfo(GlobalUser currentUser);
    
    /**
     * 通过邮箱更新用户
     *
     * @param sysUserVO 用户视图对象
     * @return 更新结果
     */
    Result<String> updateSysUserInfo(SysUserVO sysUserVO);
    
    /**
     * 查询系统所有用户
     *
     * @return 用户列表
     */
    Result<List<SysUserVO>> findUserList(SysUserQuery req);
    
    /**
     * 查询用户角色列表
     *
     * @param sysUserQuery 查询参数
     * @return 用户角色列表
     */
    Result<List<SysUserAndRoleVO>> findUserRoleList(SysUserQuery sysUserQuery);
    
    /**
     * 查询角色列表
     *
     * @param pageRequest 分页参数
     * @return 角色列表
     */
    Result<List<SysRoleVO>> findRoleList(PageRequest pageRequest);
    
    /**
     * 查询角色菜单列表
     *
     * @param pageRequest 分页参数
     * @return 角色菜单列表
     */
    Result<List<SysRoleAndMenuVO>> findRoleMenuList(PageRequest pageRequest);
    
    /**
     * 添加角色
     *
     * @param sysRoleVO 角色实体
     * @return 添加状态
     */
    Result<String> addRole(SysRoleVO sysRoleVO);
    
    /**
     * 绑定用户及角色
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 绑定结果
     */
    Result<String> bindUserAndRole(Long userId, Long roleId);
    
    /**
     * 查询用户菜单
     *
     * @return 返回所属菜单
     */
    Result<List> findUserMenus();
    
    /**
     * 删除用户
     *
     * @param userId 用户
     * @return
     */
    Result<String> removeUser(Long userId);
    
    /**
     * 编辑角色信息
     *
     * @param sysRoleVO 修改实体
     * @return 修改是否成功
     */
    Result<String> editRole(SysRoleVO sysRoleVO);
    
    /**
     * 移除角色信息
     *
     * @param roleIds 角色Id集合
     * @return 移除结果
     */
    Result<String> removeRole(List<Long> roleIds);
}